Tarea 03 / Josel Vargas Calderón y Valentina Rodriguez Fallas

Objetivo

El presente repositorio contiene los disntintos procedimientos que se requieren para obtener una adecuada georreferenciación de bases de datos y la elaboración de mapas y tablas dinámicas e interaactivas.

El objetivo de la tarea 3 es aplicar los conocimientos de los contenidos corresposdientes:

  1. Desarrollar programas en el lenguaje R y documentos en el sistema de publicación científica y técnica Quarto.

  2. Implementar tablas, gráficos y mapas con las bibliotecas DT, ggplot2, plotly y sf.

  3. Publicar resultados en la Web, junto con el código y los datos que los generan.

Se analizaran un dataset de avistamiento de felinos descargado de la base de datos de Global Biodiversity Information Facility, s edescaragarán capas desde el SNIT y de WorldClim. Se crearán tablas por medio de consultas en R, se generarán mapas y gráficos.

Fuente de datos

Registros de presencia de felinos de Costa Rica, agrupados por la Infraestructura Mundial de Información en Biodiversidad (GBIF)

Áreas silvestres protegidas (ASP) de Costa Rica, publicadas por el Sistema Nacional de Áreas de Conservación (Sinac) en el Sistema Nacional de Información Territorial (SNIT)

Capa raster de WorldClim de altitud de Costa Rica en resolución de 30 x 30 segundos. (Enlace al sitio de WorldClim).

1. Carga de librerias

Se cargan las librerias a ser utilizadas y se coloca el directorio por defecto.

Code
# Cargamos librerias
library(tidyverse)
library(plotly)
library(sf)
library(DT)
library(leaflet)
library(terra)
library(leaflet.extras)
library(leafem)
library(raster)
library(rgdal)



#set working directory
setwd("~/UCR/maestria/II Semestre 2022/progra/tarea3")

2. Carga de CSV

Code
# caragmos felinos
felinos <-
  st_read(
    "C:/Users/josel/Downloads/felinos.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude", # columna de longitud decimal
      "Y_POSSIBLE_NAMES=decimalLatitude"   # columna de latitud decimal
    ),
    quiet = TRUE
  )

3. Pregunta 1

Primero Se procede con la selección de columnas interesadas, luego se genera la tabla interactiva del paquete DT

Code
## Filtramos columnas que requerimos y lo guardamos como un objeto
tabla_felinos <-
  subset (felinos, select = c(species,
                              stateProvince,
                              locality,
                              eventDate))

# Tabla interativa de Felinos
tabla_felinos |>
  datatable(options = list(
    pageLength = 5,
    language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
  ))                            

4. Pregunta 2

Primero se vuelve a cargar el dataset de felino, pero esta vez usando la libreria de tidyverse. Esto se realiza para no tener problemas a la hora de graficar, debido a que el paquete que usamos para graficar viene del mismo paquete. Este dataset se carga con el nombre de “felinos2”. Luego se preocede a la graficación

Code
# VOLVEMOS A CARGAR FELINOS, PERO ESTA VEZ USANDO LA paquete DE TIDYVERSE
felinos2 <- read_csv("felinos2.csv")



# Gráfico de barras apiladas por especie en cada mes

grafico_barras_felinos <-
  felinos2 |>
  ggplot(aes(x = month, fill = species, na.rm = TRUE)) +
  geom_bar() +
  scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) +
  ggtitle("Cantidad de registros por especie en cada mes") +
  xlab("Mes") +
  ylab("Cantidad") +
  labs(fill = "Especie") +
  theme_classic() +
  theme(legend.position = "top")

# Gráfico de barras plotly
ggplotly(grafico_barras_felinos) |> 
  config(locale = 'es')

5. Pregunta 3

En la pregunta 3, primero cargamos el shape de provincias. Este tiene como origen el SNIT. Segundo cargamos el raster de altitud. A “Felinos” y “Provincias” se le asigna la proyección del sistema de coordenadas planas. Por ultimo creamos una paleta de colores.

5.1 Procesamos la data

Code
#cargamos Shape de provincias

provincias <-
  st_read(
    "C:/Users/josel/OneDrive/Documentos/ATLAS2014_CRTM05/Provincias2014crtm05/Provincias2014crtm05.shp",
    quiet = TRUE # para evitar el despliegue de mensajes
  )

#Caragmos raster de altitud
altitud <-
  rast(
    "altitud.tif"
  )

# Asignación de un CRS al objeto felinos
st_crs(felinos) <- 4326

# Transformación del CRS del objeto provincias a WGS84 (EPSG = 4326)
provincias <-
  provincias |>
  st_transform(4326)



# Paleta de colores de altitud de Costa Rica
colores_altitud <-
  colorNumeric(topo.colors(25),
               values(altitud),
               na.color = "transparent")

5.2 Ahora, si mapaeamos

Code
#Procedemos a Mapear

leaflet() |>
  
  setView(# centro y nivel inicial de acercamiento
    lng = -84.19452,
    lat = 9.572735,
    zoom = 7) |>
  addTiles(group = "OpenStreetMap") |> # capa base de OSM |>
  addRasterImage( # capa raster
    raster(altitud), # conversión de SpatRaster a RasterLayer 
    colors = colores_altitud, # paleta de colores
    opacity = 0.6,
    group = "Altitud",
  ) |>
  addLegend(
    title = "Altitud",
    values = values(altitud),
    pal = colores_altitud,
    position = "bottomleft",
    group = "Altitud"
  ) |>
  addProviderTiles(providers$Stamen, group = "Stamen") |>
  addProviderTiles(providers$Esri.NatGeoWorldMap,  group = "Esri.NatGeoWorldMap" ) |>
  addPolygons(
    # capa de provincias (polígonos)
    data = provincias,
    color = "black",
    fillColor = "transparent",
    stroke = TRUE,
    weight = 1.0,
    group = "Provincias",
    popup = paste(
      paste0("<strong>Provincia: </strong>", provincias$PROVINCIA),
      sep = '<br/>'
    )) |>
  
  addCircleMarkers(
    # capa de registros de presencia (puntos)
    data = felinos,
    stroke = F,
    radius = 4,
    fillColor = 'Black',
    fillOpacity = 1,
    group = "Felinos",
    popup = paste(
      paste0("<strong>Especie: </strong>", felinos$species),
      paste0("<strong>Localidad: </strong>", felinos$locality),
      paste0("<strong>Fecha: </strong>", felinos$eventDate),
      paste0("<strong>Fuente: </strong>", felinos$institutionCode),
      paste0("<a href='", felinos$occurrenceID, "'>Más información</a>"),
      sep = '<br/>'
    )
  ) |>
  addLayersControl(
    baseGroups = c("OpenStreetMap", "Stamen", "Esri.NatGeoWorldMap"),
    overlayGroups = c("Altitud","Provincias", "Felinos")) |> # control de capas
  addResetMapButton() |> # botón de reinicio
  addSearchOSM() |> # búsqueda en OSM
  addMouseCoordinates() |> # coordenadas del puntero del ratón
  addScaleBar(position = "bottomleft", options = scaleBarOptions(imperial = FALSE)) |> # barra de escala
  addMiniMap(position = "bottomleft") # mapa de ubicación